﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using SIM.Geo.BE;
using System.Linq;

namespace SIM.Geo.DA
{
    public class DAMuestraEspecial : Base
    {
        #region Metodos
        /// <summary>
        /// Método devuelve lista MuestraEspecial
        /// </summary>
        /// <returns></returns>
        public List<MuestraEspecial> ListarMuestraEspecial()
        {
            return this.Context.MuestraEspecial.ToList();
        }

        /// <summary>
        /// Método devuelve lista muestra canal por codigo
        /// </summary>
        /// <returns></returns>
        public List<buscarMuestraEspecial_Result> BuscarMuestraEspecialPorcodigo(DateTime fechaInicio, DateTime fechaFinal, int codigoCategoria, int estado)
        {
            return this.Context.buscarMuestraEspecial(fechaInicio, fechaFinal, codigoCategoria, estado).ToList();
        }
        /// <summary>
        /// Método devuelve lista muestra canal por codigos
        /// </summary>
        /// <returns></returns>
        public List<MuestraEspecial> ListarMuestraEspecialPorcodigos(List<string> codigoMuestraEspeciales)
        {
            return this.Context.MuestraEspecial.Where(x => codigoMuestraEspeciales.Contains(x.CodigoMuestraEspecial)).ToList();
        }
        /// <summary>
        /// Método inserta una muestra especial
        /// </summary>
        /// <param name="MuestraEspecial"></param>
        /// <returns></returns>
        public string InsertarMuestraEspecial(MuestraEspecial muestraEspecial)
        {
            this.Context.MuestraEspecial.AddObject(muestraEspecial);
            this.Context.SaveChanges();
            return muestraEspecial.CodigoMuestraEspecial;
        }
        /// <summary>
        /// Método modifica una muestra especial
        /// </summary>
        /// <param name="MuestraEspecial"></param>
        public void ModificarMuestraEspecial(MuestraEspecial muestraEspecial)
        {
            this.Context.MuestraEspecial.Attach(muestraEspecial);
            this.Context.ObjectStateManager.ChangeObjectState(muestraEspecial, EntityState.Modified);
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Método que elimina muestra especial
        /// </summary>
        /// <param name="MuestraEspecial"></param>
        public void EliminarMuestraEspecial(MuestraEspecial muestraEspecial)
        {
            this.Context.MuestraEspecial.Attach(muestraEspecial);
            this.Context.ObjectStateManager.ChangeObjectState(muestraEspecial, EntityState.Deleted);
            this.Context.SaveChanges();
        }
        /// <summary>
        /// Método obtener muestra mensaje por codigo
        /// </summary>
        /// <param name="codigoMuestraMensaje"></param>
        /// <returns></returns>
        public MuestraEspecial ObtenerMuestraEspecial(string codigoMuestraEspecial)
        {
            return this.Context.MuestraEspecial.Where(x => x.CodigoMuestraEspecial.Equals(codigoMuestraEspecial)).FirstOrDefault();
        }

        /// <summary>
        /// Devuelve la lista de Muestra Especial
        /// </summary>
        /// <param name="codigoGrupoMezcla"></param>
        /// <returns></returns>
        public List<listarBlendingMuestra_Result> BuscarMuestraEspecialPorCodigoGrupoMezcla(string codigoGrupoMezcla)
        {
            return this.Context.listarBlendingMuestra(codigoGrupoMezcla).ToList();
        }

        /// <summary>
        /// Devuelve la lista de Muestra Especial por Tipo de Cancha
        /// </summary>
        /// <param name="codigoTipoCancha"></param>
        /// <param name="codigoGrupoMezcla"></param>
        /// <returns></returns>
        public List<buscarMuestraEspecialPorTipoCancha_Result> BuscarMuestraEspecialPorTipoCancha(int codigoTipoCancha, string codigoMuestraEspecial)
        {
            return this.Context.buscarMuestraEspecialPorTipoCancha(codigoTipoCancha, codigoMuestraEspecial).ToList();
        }
        #endregion

        /// <summary>
        /// Devuelve la lista de Muestras por Categoria
        /// <param name="codigoCategoria"></param>
        /// <returns></returns>
        public List<MuestraEspecial> ListarMuestraEspecialPorCategoria(int codigoCategoria)
        {
            return this.Context.MuestraEspecial.Where(x => x.CodigoCategoriaMuestraEspecial == codigoCategoria).ToList();

        }

        /// <summary>
        /// Obtiene el último código de muestra generado
        /// </summary>
        /// <param name="codigoCategoriaMuestraEspecial"></param>
        /// <returns></returns>
        public string ObtenerUltimoCodigoMuestraEspercial(int codigoCategoriaMuestraEspecial)
        {
            return this.Context.obtenerUltimoCodigoMuestraEspercial(codigoCategoriaMuestraEspecial).FirstOrDefault();
        }
    }
}
